<?php

/**
 * Class ZipDataConverter
 */
class ZipDataConverter
{
    /**
     * @var string 対象の年月
     */
    private $yearMonth = "";


    /**
     * コンストラクタ
     * @param $yearMonth 対象の年月
     */
    public function __construct($yearMonth)
    {
        $this->yearMonth = $yearMonth;
    }

    /**
     * 変換実行
     */
    public function runConversion()
    {
        /** @var $yearMonth string 対象の年月 */
        $yearMonth = $this->yearMonth;
        /** @var $updateSqlFiles 更新用 SQL ファイル名 */
        $updateSqlFiles = array();

        // 全県データがあれば処理する
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'KEN_ALL.CSV';
        if (file_exists($fileName)) {
            echo '郵便番号データ ... 変換開始 ...' . "\n\n";
            $zipData = new ZipData($yearMonth . DIRECTORY_SEPARATOR . 'KEN_ALL');
            $zipData->normalizeCsvData();
            $zipData->updateKanaDic();
            $zipData->createInsertSqlFiles();
            echo '郵便番号データ ... 変換完了 !!' . "\n\n";
        }

        // 削除用データがあれば処理する
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'DEL_' . $yearMonth . '.CSV';
        if (file_exists($fileName)) {
            echo '郵便番号データ (削除分) ... 変換開始 ...' . "\n\n";
            $zipData = new ZipData($yearMonth . DIRECTORY_SEPARATOR . 'DEL_' . $yearMonth);
            $zipData->normalizeCsvData();
            $zipData->updateKanaDic();
            $zipData->createDeleteSqlFiles();
            $updateSqlFiles = array_merge($updateSqlFiles, $zipData->sqlFileNames());
            echo '郵便番号データ (削除分) ... 変換完了 !!' . "\n\n";
        }

        // 追加用データがあれば処理する
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'ADD_' . $yearMonth . '.CSV';
        if (file_exists($fileName)) {
            echo '郵便番号データ (追加分) ... 変換開始 ...' . "\n\n";
            $zipData = new ZipData($yearMonth . DIRECTORY_SEPARATOR . 'ADD_' . $yearMonth);
            $zipData->normalizeCsvData();
            $zipData->updateKanaDic();
            $zipData->createInsertSqlFiles();
            $updateSqlFiles = array_merge($updateSqlFiles, $zipData->sqlFileNames());
            echo '郵便番号データ (追加分) ... 変換完了 !!' . "\n\n";
        }

        // 事業所データ
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'JIGYOSYO.CSV';
        if (file_exists($fileName)) {
            echo '大口事業所個別番号データ ... 変換開始 ...' . "\n\n";
            $zipBizData = new ZipBizData($yearMonth . DIRECTORY_SEPARATOR . 'JIGYOSYO');
            $zipBizData->normalizeCsvData();
            $zipBizData->createInsertSqlFiles();
            echo '大口事業所個別番号データ ... 変換完了 !!' . "\n\n";
        }

        // 事業所削除用データがあれば処理する
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'JDEL' . $yearMonth . '.CSV';
        if (file_exists($fileName)) {
            echo '大口事業所個別番号データ (削除分) ... 変換開始 ...' . "\n\n";
            $zipBizData = new ZipBizData($yearMonth . DIRECTORY_SEPARATOR . 'JDEL' . $yearMonth);
            $zipBizData->normalizeCsvData();
            $zipBizData->createDeleteSqlFiles();
            $updateSqlFiles = array_merge($updateSqlFiles, $zipBizData->sqlFileNames());
            echo '大口事業所個別番号データ (削除分) ... 変換完了 !!' . "\n\n";
        }

        // 事業所追加用データがあれば処理する
        $fileName = $yearMonth . DIRECTORY_SEPARATOR . 'JADD' . $yearMonth . '.CSV';
        if (file_exists($fileName)) {
            echo '大口事業所個別番号データ (追加分) ... 変換開始 ...' . "\n\n";
            $zipBizData = new ZipBizData($yearMonth . DIRECTORY_SEPARATOR . 'JADD' . $yearMonth);
            $zipBizData->normalizeCsvData();
            $zipBizData->createInsertSqlFiles();
            $updateSqlFiles = array_merge($updateSqlFiles, $zipBizData->sqlFileNames());
            echo '大口事業所個別番号データ (追加分) ... 変換完了 !!' . "\n\n";
        }

        // 更新用 SQL を一つにまとめる
        if (count($updateSqlFiles) > 0) {
            $dstFileName = $yearMonth . DIRECTORY_SEPARATOR . "update_" . $yearMonth . ".sql";
            @unlink($dstFileName);
            foreach ($updateSqlFiles as $src) {
                file_put_contents($dstFileName, file_get_contents($src), FILE_APPEND);
            }
            echo '更新用 SQL 作成完了 !!' . "\n\n";
        }
    }
}
